package com.example.demo.client;


import com.example.demo.client.evt.cssmqry.GetRegionChildrenEvt;
import com.example.demo.client.evt.cssmqry.QryCodeListEvt;
import com.example.demo.client.evt.cssmqry.QryRegionListEvt;
import com.example.demo.client.evt.cssmqry.menu.GetPermissionByLoginNameEvt;
import com.example.demo.client.evt.cssmqry.menu.UpdatePermissionByParamEvt;
import com.example.demo.client.evt.cssmqry.role.QryRoleEvt;
import com.example.demo.client.evt.cssmqry.user.QryUserEvt;
import com.example.demo.client.evt.sysbasequery.*;
import com.example.demo.client.evt.tenancy.QryTenancyRelateUserEvt;
import com.example.demo.client.vm.cssmqry.CodeVm;
import com.example.demo.client.vm.cssmqry.region.RegionVm;
import com.example.demo.client.vm.cssmqry.user.DetailUserVm;
import com.example.demo.client.vm.cssmqry.user.SimpleUserVm;
import com.example.demo.client.vm.sysbasequery.*;
import com.example.demo.domain.Code;
import com.example.demo.domain.ResourceEntity;
import com.ffcs.oss.param.out.ServiceResp;
import com.ffcs.oss.param.vm.QueryPageVm;
import com.example.demo.web.rest.evt.ArticleCatalogIdEvt;
import com.example.demo.web.rest.evt.IdEvt;
import com.example.demo.web.rest.evt.TableIdSizeEvt;
import io.swagger.annotations.ApiOperation;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;

import java.util.List;
import java.util.Map;

/**
 * @author: xujiajun
 * @date: 2020/9/2 19:23
 */

@AuthorizedFeignClient(name = "cs-sm-qry-srv")
//@FeignClient(name = "nm-fm-query-srv",url = "http://127.0.0.1:8076")
public interface SmQryClient {


    /**********************字典值查询接口**************************/
    @ApiOperation("查询字典值")
    @PostMapping(value = "/rsc/code/qryCodeList")
    ServiceResp<List<CodeVm>> qryCodeList(@RequestBody QryCodeListEvt evt);

    /**********************用户管理查询接口**************************/
    @ApiOperation("清空qry基础服务的所有缓存")
    @PostMapping(value = "/rsc/user/clearQryCache")
    ServiceResp clearQryCache();

    @ApiOperation("根据用户ID或登录名查询某个用户详细信息")
    @PostMapping("/rsc/user/qryDetailUser")
    ServiceResp<DetailUserVm> qryDetailUser(@RequestBody QryUserEvt evt);

    @ApiOperation(value = "查询用户ID")
    @PostMapping("/rsc/user/getUserIdByLoginName")
    ServiceResp<Long> getUserIdByLoginName(@RequestBody LoginNameEvt evt);

    @ApiOperation("用户管理下拉框取数接口")
    @PostMapping("/rsc/user/getUserStaticData")
    ServiceResp<UserStaticDataVm> getUserStaticData();

    @ApiOperation("查询用户信息")
    @PostMapping("/rsc/user/queryUser")
    ServiceResp<QueryPageVm<QueryUserVm>> queryUser(@RequestBody QueryUserEvt evt);

    @ApiOperation("导出用户信息")
    @PostMapping("/rsc/user/exportUser")
    ServiceResp<QueryPageVm<QueryUserVm>> exportUser(@RequestBody QueryUserEvt evt);

    @ApiOperation(value = "是否可以编辑用户",notes = "判断对应用户是否为超级管理员或是否为当前用户")
    @PostMapping("/rsc/user/isEditUser")
    ServiceResp<Boolean> isEditUser(@RequestBody IsEditUserEvt evt);

    @ApiOperation("用户名是否存在")
    @PostMapping("/rsc/user/isUserNameExist")
    ServiceResp<Boolean> isUserNameExist(@RequestBody IsUserNameExistEvt evt);

    @ApiOperation("根据ID获取用户信息")
    @PostMapping("/rsc/user/getUserById")
    ServiceResp<UserVm> getUserById(@RequestBody UserIdEvt evt);

    @ApiOperation("用户管理获取角色树")
    @PostMapping("/rsc/user/getRoleTree")
    ServiceResp<List<RoleTreeVm>> getRoleTreeOfUser(@RequestBody UserIdEvt evt);

    @ApiOperation("用户管理功能权限树")
    @PostMapping("/rsc/user/getPermissionTree")
    ServiceResp<List<PermissionTreeVm>> getPermissionTree(@RequestBody UserIdEvt evt);

    @ApiOperation("用户管理批量赋权树")
    @PostMapping("/rsc/user/getBatchPermissionTree")
    ServiceResp<List<PermissionTreeVm>> getBatchPermissionTree(@RequestBody UserIdsEvt evt);

    @ApiOperation("用户管理资源权限树")
    @PostMapping("/rsc/user/getResourceTree")
    ServiceResp<List<ResourceEntity>> getResourceTreeOfUser(@RequestBody ResourceTreeOfUserEvt evt);

    @ApiOperation("获取用户组树")
    @PostMapping("/rsc/user/getGroupTree")
    ServiceResp<List<UserGroupTreeVm>> getGroupTreeOfUser(@RequestBody UserGroupTreeEvt evt);

    @ApiOperation("查询用户总数")
    @PostMapping("/rsc/user/totalUser")
    ServiceResp<Long> totalUser();

    @ApiOperation("根据用户ID或登录名查询某个用户简单信息")
    @PostMapping("/rsc/user/qrySimpleUser")
    ServiceResp<SimpleUserVm> qrySimpleUser(@RequestBody QryUserEvt evt);

    @ApiOperation("清空qry基础服务的用户查询缓存")
    @PostMapping(value = "/rsc/user/clearUserCache")
    ServiceResp clearUserCache();

    /**********************用户组管理查询接口**************************/
    @ApiOperation("获取用户组树")
    @PostMapping("/rsc/usergroup/getGroupTree")
    ServiceResp<List<UserGroupTreeVm>> getGroupTreeOfGroup(@RequestBody UserGroupTreeEvt evt);

    @ApiOperation("获取用户组信息")
    @PostMapping("/rsc/usergroup/getGroupTreeInfos")
    ServiceResp getGroupTreeInfos(@RequestBody UserGroupTreeEvt evt);

    @ApiOperation("获取用户组下拉框数据")
    @PostMapping("/rsc/usergroup/getUserGroupStaticData")
    ServiceResp<UserGroupStaticDataVm> getUserGroupStaticData();

    @ApiOperation("根据ID获取用户组信息")
    @PostMapping("/rsc/usergroup/getGroupById")
    ServiceResp<UserGroupVm> getGroupById(@RequestBody @Validated IdEvt evt);

    @ApiOperation("获取用户组管理角色树")
    @PostMapping("/rsc/usergroup/getRoleTree")
    ServiceResp<List<RoleTreeVm>> getRoleTreeOfGroup(@RequestBody @Validated GetTreeOfGroupEvt evt);

    @ApiOperation("获取用户组管理功能权限树")
    @PostMapping("/rsc/usergroup/getPermissionTree")
    ServiceResp<List<PermissionTreeVm>> getPermissionTreeOfUserGroup(@RequestBody @Validated GetTreeOfGroupEvt evt);

    @ApiOperation("是否可以删除用户组")
    @PostMapping("/rsc/usergroup/isCanDelUserGroup")
    ServiceResp<Boolean> isCanDelUserGroup(@RequestBody @Validated IdEvt evt);

    @ApiOperation("用户组是否同名")
    @PostMapping("/rsc/usergroup/isGroupNameEqual")
    ServiceResp<Boolean> isGroupNameEqual(@RequestBody @Validated IsGroupNameEqualEvt evt);

    @ApiOperation("根据id获取fullGroupId")
    @PostMapping("/rsc/usergroup/getFullGroupIdByGroupId")
    ServiceResp<String>  getFullGroupIdByGroupId(@RequestBody @Validated IdEvt evt);

    @ApiOperation("根据id获取groupFullName")
    @PostMapping("/rsc/usergroup/getGroupFullNameByGroupId")
    ServiceResp<String> getGroupFullNameByGroupId(@RequestBody @Validated IdEvt evt);

    @ApiOperation("用户管理资源权限树")
    @PostMapping("/rsc/usergroup/getResourceTree")
    ServiceResp<List<ResourceEntity>> getResourceTreeOfGroup(@RequestBody ResourceTreeOfGroupEvt evt);

    /**********************角色管理查询接口**************************/
    @ApiOperation("角色管理获取目录树")
    @PostMapping("/rsc/role/getDirectoryTree")
    ServiceResp<List<RoleTreeVm>> getDirectoryTree();

    @ApiOperation("角色管理获取角色目录树")
    @PostMapping("/rsc/role/getRoleTree")
    ServiceResp<List<RoleTreeVm>> getRoleTree(@RequestBody LoginNameEvt evt);

    @ApiOperation("角色管理获取角色目录树")
    @PostMapping("/rsc/role/getRoleInfo")
    ServiceResp<List<RoleTreeVm>> getRoleInfo(@RequestBody QryRoleEvt evt);

    @ApiOperation("角色管理获取角色目录信息")
    @PostMapping("/rsc/role/getRoleTreeMenu")
    ServiceResp<List<RoleTreeVm>> getRoleTreeMenu(@RequestBody LoginNameEvt evt);

    @ApiOperation("获取角色管理下拉框数据")
    @PostMapping("/rsc/role/getRoleStaticData")
    ServiceResp<RoleStaticDataVm> getRoleStaticData();

    @ApiOperation("根据ID获取角色基本信息")
    @PostMapping("/rsc/role/getRoleById")
    ServiceResp<RoleVm> getRoleById(@RequestBody IdEvt evt);

    @ApiOperation("是否可以编辑角色，非管理员时判断当前用户是否自己创建,只能编辑自己创建的角色或目录")
    @PostMapping("/rsc/role/isEditRole")
    ServiceResp<Boolean> isEditRole(@RequestBody IdEvt evt);

    @ApiOperation("是否可以删除角色")
    @PostMapping("/rsc/role/isCanDelRole")
    ServiceResp<Boolean> isCanDelRole(@RequestBody isCanDelRoleEvt evt);

    @ApiOperation("角色名称是否存在")
    @PostMapping("/rsc/role/isRoleNameExist")
    ServiceResp<Boolean> isRoleNameExist(@RequestBody isRoleNameExistEvt evt);

    @ApiOperation("获取角色全量ID")
    @PostMapping("/rsc/role/getFullRoleId")
    ServiceResp<String> getFullRoleId(@RequestBody IdEvt evt);

    @ApiOperation("角色关联用户查询")
    @PostMapping("/rsc/role/getRoleRelateUser")
    ServiceResp<QueryPageVm<GetRoleRelateUserVm>> getRoleRelateUser(@RequestBody GetRoleRelateUserEvt evt);

    @ApiOperation("角色管理功能权限树")
    @PostMapping("/rsc/role/getPermissionTree")
    ServiceResp<List<PermissionTreeVm>> getPermissionTree(@RequestBody IdEvt evt);

    @ApiOperation("角色管理资源权限树")
    @PostMapping("/rsc/role/getResourceTree")
    public ServiceResp getResourceTreeOfRole(@RequestBody ResourceTreeOfRoleEvt evt);

    /**********************登录日志、系统日志和操作日志查询接口**************************/
    @ApiOperation("查询登录日志")
    @PostMapping("/rsc/log/queryLoginLog")
    ServiceResp<QueryPageVm<LoginLogVm>> queryLoginLog(@RequestBody LoginLogEvt evt);

    @ApiOperation("是否可以导出登录日志")
    @PostMapping("/rsc/log/isCanExportLoginLog")
    ServiceResp<Boolean> isCanExportLoginLog(@RequestBody LoginLogEvt evt);

    @ApiOperation("今日登录用户数")
    @PostMapping("/rsc/log/todayLoginUser")
    ServiceResp<Long> todayLoginUser();

    @ApiOperation("查询系统日志")
    @PostMapping("/api/log/queryLog")
    ServiceResp<QueryPageVm<LogVm>> queryLog(@RequestBody QueryLogEvt evt);

    @ApiOperation("是否可以导出系统日志")
    @PostMapping("/rsc/log/isCanExportLog")
    ServiceResp<Boolean> isCanExportLog(@RequestBody QueryLogEvt evt);

    @ApiOperation("查询操作日志")
    @PostMapping("/rsc/log/queryOperateLog")
    ServiceResp<QueryPageVm<OperateLogVm>> queryOperateLog(@RequestBody QueryOperateLogEvt evt);

    @ApiOperation("是否可以导出操作日志")
    @PostMapping("/rsc/log/isCanExportOperateLog")
    ServiceResp<Boolean> isCanExportOperateLog(@RequestBody QueryOperateLogEvt evt);

    /**********************系统常量查询接口**************************/
    @ApiOperation("根据key获取系统常量配置值")
    @PostMapping(value = "/rsc/sysConfig/getSystemConfigValueByKey")
    ServiceResp<String> getSystemConfigValueByKey(@RequestBody @Validated KeyEvt evt);

    @ApiOperation("更新所有系统常量")
    @PostMapping(value = "/rsc/sysConfig/refreshAll")
    ServiceResp refreshAllSystemConfig();

    @ApiOperation("查询系统常量")
    @PostMapping(value = "/rsc/sysConfig/querySystemConfig")
    ServiceResp<QueryPageVm<SystemConfigVm>> querySystemConfig(@RequestBody QuerySystemConfigEvt evt);

    @ApiOperation("清除缓存")
    @PostMapping(value = "/rsc/sysConfig/clearSysConfigCache")
    ServiceResp clearSysConfigCache();

    @ApiOperation("主键id策略")
    @PostMapping(value = "/rsc/sysConfig/getTableId")
    Long getTableId(@RequestBody TableIdSizeEvt evt);


    @ApiOperation("根据key获取系统常量配置值")
    @PostMapping("/rsc/sysConfig/getSysConfigValue")
    ServiceResp<String> getSysConfigValue(@RequestBody @Validated KeyEvt evt);


    /**********************URL配置查询接口**************************/
    @ApiOperation("刷新URL配置缓存")
    @PostMapping(value = "/rsc/urlConfig/refreshAll")
    ServiceResp refreshAllUrlConfig();

    @ApiOperation("查询URL配置")
    @PostMapping(value = "/rsc/urlConfig/queryUrlConfig")
    ServiceResp<QueryPageVm<UrlConfigVm>> queryUrlConfig(@RequestBody QueryUrlConfigEvt evt);

    /**********************字典值管理查询接口**************************/
    @ApiOperation("刷新字典值缓存")
    @PostMapping(value = "/rsc/code/refreshAll")
    ServiceResp refreshAllCode();

    @ApiOperation("查询字典值")
    @PostMapping(value = "/rsc/code/queryCode")
    ServiceResp<QueryPageVm<Code>> queryCode(@RequestBody QueryCodeEvt evt);

    @ApiOperation("通过列名和表名获取字典值")
    @PostMapping(value = "/rsc/code/getByColNameAndTableName")
    ServiceResp<List<com.example.demo.client.vm.sysbasequery.CodeVm>> getByColNameAndTableName(@RequestBody QueryCodeListEvt evt);

    /**********************菜单管理查询接口**************************/
    @ApiOperation("根据id获取菜单的FullMenuId")
    @PostMapping(value = "/rsc/menu/getFullMenuIdById")
    ServiceResp<String> getFullMenuIdById(@RequestBody IdEvt evt);

    @ApiOperation("保存菜单前的检查")
    @PostMapping(value = "/rsc/menu/saveMenuChecked")
    ServiceResp<Boolean> saveMenuChecked(@RequestBody SaveMenuCheckedEvt evt);

    @ApiOperation("菜单查询接口")
    @PostMapping(value = "/rsc/menu/getMenuTreeByCondition")
    ServiceResp<List<MenuTreeVm>> getMenuTreeByCondition(@RequestBody MenuConditionEvt evt);

    @ApiOperation("菜单查询接口")
    @PostMapping(value = "/rsc/menu/qryMenuTree")
    ServiceResp<List<MenuTreeVm>> qryMenuTree(@RequestBody MenuConditionEvt evt);

    @ApiOperation("菜单管理静态数据")
    @PostMapping(value = "/rsc/menu/getMenuStaticData")
    ServiceResp<MenuStaticDataVm> getMenuStaticData();

    @ApiOperation("子集的FULL_MENU_ID集合")
    @PostMapping(value = "/rsc/menu/getChildFullMenuIds")
    ServiceResp<List<FullMenuIdsVm>> getChildFullMenuIds(@RequestBody IdEvt evt);

    @ApiOperation("根据父id查询父菜单名")
    @PostMapping("/rsc/menu/getMenuNameById")
    ServiceResp getMenuNameById(@RequestBody @Validated IdEvt evt);

    @ApiOperation("清空qry基础服务的菜单缓存")
    @PostMapping(value = "/rsc/menu/clearMenuCache")
    ServiceResp clearMenuCache();

    /**********************反馈管理查询接口**************************/
    @ApiOperation("反馈查询接口")
    @PostMapping("/rsc/feedback/queryFeedback")
    ServiceResp<QueryPageVm<FeedbackVm>> queryFeedback(@RequestBody QueryFeedbackEvt evt);

    /**********************用户托管管理查询接口**************************/
    @ApiOperation("获取某用户的所有托管记录")
    @PostMapping(value = "/rsc/trusteeship/getTrusteeshipOfUser")
    ServiceResp<List<UserTrusteeshipVm>> getTrusteeshipOfUser(@RequestBody TrusteeshipOfUserEvt evt);

    @ApiOperation("根据id获取托管信息")
    @PostMapping(value = "/rsc/trusteeship/getTrusteeshipById")
    ServiceResp<UserTrusteeshipVm> getTrusteeshipById(@RequestBody IdEvt evt);

    @ApiOperation("查询托管信息")
    @PostMapping(value = "/rsc/trusteeship/queryTrusteeship")
    ServiceResp<QueryPageVm<QueryUserTrusteeshipVm>> queryTrusteeship(@RequestBody QueryTrusteeshipEvt evt);

    /**********************帮助文章管理查询接口**************************/
    @ApiOperation("查询文章")
    @PostMapping("/rsc/article/queryArticle")
    ServiceResp<QueryPageVm<ArticleVm>> queryArticle(@RequestBody QueryArticleEvt evt);

    @ApiOperation("查询文章关联的所有目录名称")
    @PostMapping("/rsc/article/getCatalogNamesByArticleId")
    ServiceResp<CatalogNameVm> getCatalogNamesByArticleId(@RequestBody IdEvt evt);

    @ApiOperation("查询文章内容详情")
    @PostMapping("/rsc/article/getArticleContentById")
    ServiceResp<ArticleContentVm> getArticleContentById(@RequestBody IdEvt evt);

    /**********************帮助目录管理管理查询接口**************************/
    @ApiOperation("查询可添加文章查询列表参数")
    @PostMapping("/rsc/catalog/queryAddibleArticles")
    ServiceResp<QueryPageVm<AddibleArticleVm>> queryAddibleArticles(@RequestBody AddibleArticleEvt evt);

    @ApiOperation("获取目录树")
    @PostMapping("/rsc/catalog/getCatalogTree")
    ServiceResp<List<CatalogTreeVm>> getCatalogTree();

    @ApiOperation("根据id获取FullCatalogId")
    @PostMapping("/rsc/catalog/getFullCatalogIdById")
    ServiceResp<String> getFullCatalogIdById(@RequestBody IdEvt evt);

    @ApiOperation("帮助目录管理查询文章")
    @PostMapping("/rsc/catalog/queryArticle")
    ServiceResp<QueryPageVm<QueryArticleVm>> queryArticle(@RequestBody QueryArticleCatalogEvt evt);

    @ApiOperation("目录是否有子节点")
    @PostMapping("/rsc/catalog/hasChild")
    ServiceResp<Boolean> hasChild(@RequestBody IdEvt evt);

    @ApiOperation("文章目录是否有关系")
    @PostMapping("/rsc/catalog/hasRelation")
    ServiceResp<Boolean> hasRelation(@RequestBody ArticleCatalogIdEvt evt);

    /**********************帮助管理查询接口**************************/
    @ApiOperation("菜单管理的帮助目录树(选中菜单关联的目录)")
    @PostMapping("/rsc/help/getHelpCatalogTree")
    ServiceResp<List<HelpCatalogVm>> getHelpCatalogTree(@RequestBody NameEnEvt evt);

    @ApiOperation("帮助中心当前菜单下的帮助目录树")
    @PostMapping("/rsc/help/getHelpCatalogAndArticle")
    ServiceResp<List<HelpCatalogArticleVm>> getHelpCatalogAndArticle(@RequestBody NameEnEvt evt);

    /**********************日志统计查询接口**************************/
    @ApiOperation("获取日志统计数据")
    @PostMapping(value = "/rsc/logStatistic/getLogStatisticsData")
    ServiceResp<LogStatisticsDataVm> getLogStatisticsData();

    @ApiOperation("用户个人功能使用TOP10下钻数据")
    @PostMapping(value = "/rsc/logStatistic/getUserFunctionUseTop10Drill")
    ServiceResp<HistogramVm>  getUserFunctionUseTop10Drill(@RequestBody LogStatisticEvt evt);

    @ApiOperation("系统功能TOP10使用下钻数据")
    @PostMapping(value = "/rsc/logStatistic/getFunctionUseTop10Drill")
    ServiceResp<HistogramVm> getFunctionUseTop10Drill(@RequestBody LogStatisticEvt evt);

    /**********************区域接口**************************/
    @ApiOperation("获得区域树：当前用户为超级管理员显示全部数据；当前用户为普通用户：显示当前用户所属区域及其子节点。")
    @PostMapping("/rsc/region/getRegionTree")
    ServiceResp<List<QueryRegionListVm>> getRegionTree(@RequestBody LoginNameEvt evt);

    @ApiOperation("获取区域信息-用户管理")
    @PostMapping("/rsc/region/getRegion")
    ServiceResp<Map> getRegion(@RequestBody GetRegionEvt evt);

    @ApiOperation("根据查询条件获取区域信息")
    @PostMapping("/rsc/region/qryRegionList")
    ServiceResp qryRegionList(@RequestBody QryRegionListEvt evt);

    @ApiOperation("根据区域Id获取区域及其儿子数据但不转换成树")
    @PostMapping("/rsc/region/getRegionList")
    List<RegionVm> getRegionList(@RequestBody GetRegionChildrenEvt evt);

    /*********************权限控制*****************************/
    @ApiOperation("根据用户名，获取权限码数据")
    @PostMapping("/rsc/permission/queryPermissionByLoginName")
    ServiceResp queryPermissionByLoginName(@RequestBody @Validated GetPermissionByLoginNameEvt evt);

    @ApiOperation("根据类型及主键标识，刷新权限码数据")
    @PostMapping("/rsc/permission/updatePermissionByParam")
    ServiceResp updatePermissionByParam(@RequestBody @Validated UpdatePermissionByParamEvt evt);


    @ApiOperation("根据类型及主键标识，刷新权限码数据")
    @PostMapping("/rsc/permission/updatePermission")
    void updatePermission(@RequestBody @Validated List<String>userList);

    @ApiOperation("根据类型及主键标识，刷新权限码数据")
    @PostMapping("/rsc/tenancy/qryTenancyRelateUserList")
    ServiceResp qryTenancyRelateUserList(@RequestBody QryTenancyRelateUserEvt evt);


    @ApiOperation("获取组织树携带用户数据")
    @PostMapping("/rsc/user/getGroupUser")
    ServiceResp getGroupUser(UserGroupTreeEvt evt);
}

